﻿using Dm;
using GXRTBTC.PublicClassLibrary.Redis;
using NewLife.Caching;
using RedisHelp;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Dm.net.buffer.ByteArrayBuffer;

namespace Test
{
    public class offline
    {
        //public List<string> positionIds = redis.StringGet<List<string>>("positionIds");
        ////从缓存读取设置
        //private Dictionary<string, string> paramInfo = redis.HashGetAllDict<string>("paramInfo");
        //private int onlineTimeOut = int.Parse(paramInfo.GetValueOrDefault("OnlineTimeOut", "30"));

        ///// <summary>
        ///// 数据处理
        ///// 工位号
        ///// </summary>
        //private void DealDataPosition(int threadNo)
        //{
        //    Thread.Sleep(1000);
        //    TimeSpan ts;
        //    RedisHelper redis = new RedisHelper(redisConnString, mLogger);
        //    IBatch batch = redis.CreateBatch();
        //    Dictionary<string, string> onlineStatus = new Dictionary<string, string>();
        //    int hourPre = 0;
        //    while (true)
        //    {
        //        //采集服务启动时，先写一条服务启动时间，本服务判断启动时间一分钟内不做离线判断，避免重启采集服务造成台站上报超时的告警
        //        //本条key存在时间为2分钟，2分钟内不做离线判断
        //        bool isStart = redis.KeyExists("DataReceiveService_start");
        //        //ping任务数量
        //        //int subTaskCount = redis.HashKeys<string>("SubTaskService").Count;
        //        if (!isStart)
        //        {
        //            var sw = Stopwatch.StartNew();

        //            try
        //            {
        //                //工位离线判断
        //                if (positionIds != null && positionIds.Count > 0)
        //                {
        //                    int orderAllNo = 0;
        //                    int orderMatchNo = 0;
        //                    foreach (string positionId in positionIds)
        //                    {
        //                        //多个副本分配任务
        //                        string onlineKey = "online_" + positionId;

        //                        if (true)
        //                        {
        //                            string online = redis.StringGet(onlineKey) ?? "1";
        //                            if (onlineStatus.ContainsKey(onlineKey))
        //                            {
        //                                onlineStatus[onlineKey] = online;
        //                            }
        //                            else
        //                            {
        //                                onlineStatus.TryAdd(onlineKey, online);
        //                            }
        //                        }
        //                        DateTime dt = redis.StringGet<DateTime>("newest_time_" + positionId);
        //                        ts = DateTime.Now - dt;

        //                        //总秒数超过参数给定的描述，则认为离线
        //                        if (ts.TotalSeconds > onlineTimeOut && !"1".Equals(onlineStatus[onlineKey]))
        //                        {
        //                            onlineStatus[onlineKey] = "1";
        //                            batch.MStringSetAsync(onlineKey, "1");
        //                        }
        //                    }
        //                }
        //            }
        //            catch (Exception e)
        //            {
        //                mLogger.LogError("工位离线判断异常，" + e.Message);
        //            }
        //            finally
        //            {
        //                batch.Execute();
        //            }
        //        }

        //        hourPre = DateTime.Now.Hour;
        //        //间隔尽量少，判断也需要时间，实际单个台站离线判断也许就需要几秒了
        //        Thread.Sleep(500);
        //    }
        //}
    }
}
